package day20170505.ch03;


/**
 * 队列操作类
 * @author 罗智壕-13424431416
 *
 * 2017年5月5日
 */
public class Queue {
	/**
	 * 队列的头节点
	 */
	private Node head;
	
	/**
	 * 构造方法
	 * @param head
	 */
	public Queue(Node head) {
		this.head = head;
	}
	
	
	/**
	 * 忘队列中添加1个节点
	 * @param node
	 */
	public void push(Node node){
		Node temp = this.head;
		while(true){
			if(null == temp.getNext()){
				temp.setNext(node);
				break;
			}
			temp = temp.getNext();
		}
	}
	
	
	/**
	 * 从队列中删除1个元素 每次删除的都是头节点的下一个节点
	 * @return
	 */
	public Node pop(){
		
		Node temp = this.head;
		if(null != temp.getNext()){
			temp.setNext(temp.getNext().getNext());
			temp = temp.getNext();
		}else{
			System.out.println("没有元素了...");
		}
		
		return temp;
	}
	
	
	/**
	 * 打印队列中所有的元素
	 */
	public void printQueue(){
		Node temp = this.head.getNext();
		while(true){
			if(null != temp){
				System.out.print(temp.getValue() + "-->");
				if(null != temp.getNext()){
					temp = temp.getNext();
				}else{
					break;
				}
			}else{
				break;
			}
		}
	}
	
	
	/**
	 * 把updateNode的值修改成updateValue
	 * @param updateNode
	 * @param updateValue
	 */
	public void updateNode(Node updateNode, int updateValue){
		Node temp = this.head.getNext();
		while(true){
			if(null != temp){
				if(temp.getValue() == updateNode.getValue()){
					temp.setValue(updateValue);
					break;
				}
				temp = temp.getNext();
			}else{
				break;
			}
		}
	}
}
